﻿/**
 * Created in 2012-2-7.
 */
package kit4j.generator.keyless;

import java.awt.Font;

import kit4j.generator.keyed.IKeyedGenerator;

/**
 * 随机逻辑字体生成器，可随机生成样式与大小随机的逻辑字体。<br />
 * 关于逻辑字体的描述，见{@link java.awt.Font Font}中的描述。
 * 
 * @author MiniKnife
 * 
 */
public class RandomLogicalFontKeylessGenerator implements IKeylessGenerator<Font> {

	/**
	 * 所有字体名称。
	 */
	private static final String[] FONT_NAMES = { Font.DIALOG,
			Font.DIALOG_INPUT, Font.MONOSPACED, Font.SANS_SERIF, Font.SERIF };

	/**
	 * 所有字体风格。
	 */
	private static final int[] FONT_STYLES = { Font.PLAIN, Font.BOLD,
			Font.ITALIC, Font.BOLD + Font.ITALIC };

	private IKeyedGenerator<Integer, Integer> intGenerator;

	/**
	 * 生成的字体的最大尺寸。
	 */
	private int minFontSize;

	/**
	 * 生成的字体的最大尺寸。
	 */
	private int maxFontSize;

	/**
	 * 创建一个随机逻辑字体生成器。默认的字体最小尺寸为8，字体最大尺寸为96。
	 */
	public RandomLogicalFontKeylessGenerator() {
		this(8, 96);
	}

	/**
	 * 根据指定的字体尺寸范围创建一个随机逻辑字体生成器。
	 * 
	 * @param minFontSize
	 *            字体最大尺寸
	 * @param maxFontSize
	 *            字体最大尺寸
	 */
	public RandomLogicalFontKeylessGenerator(int minFontSize, int maxFontSize) {
		this.minFontSize = minFontSize;
		this.maxFontSize = maxFontSize;
		intGenerator = new kit4j.generator.keyed.RandomPositiveIntegerKeyedGenerator();
	}

	/**
	 * @see kit4j.generator.keyless.IKeylessGenerator#next()
	 */
	@Override
	public Font next() {
		return new Font(FONT_NAMES[intGenerator.next(FONT_NAMES.length)],
				FONT_STYLES[intGenerator.next(FONT_STYLES.length)],
				intGenerator.next(maxFontSize - minFontSize + 1) + minFontSize);
	}

	public int getMinFontSize() {
		return minFontSize;
	}

	public void setMinFontSize(int minFontSize) {
		this.minFontSize = minFontSize;
	}

	public int getMaxFontSize() {
		return maxFontSize;
	}

	public void setMaxFontSize(int maxFontSize) {
		this.maxFontSize = maxFontSize;
	}

}
